package com.frxuexi.lib_base.alipay

import android.annotation.SuppressLint
import android.app.Activity
import android.app.AlertDialog
import android.content.Context
import android.content.DialogInterface
import android.os.Handler
import android.os.Message
import android.text.TextUtils
import android.util.Log
import com.alibaba.android.arouter.launcher.ARouter
import com.alipay.sdk.app.PayTask
import com.blankj.utilcode.util.ToastUtils
import com.frxuexi.lib_base.alipay.util.OrderInfoUtil2_0
import org.greenrobot.eventbus.EventBus

object MyPay {
    /**
     * 用于支付宝支付业务的入参 app_id。
     */
    val APPID = "2021000147670418"

    /**
     * 用于支付宝账户登录授权业务的入参 pid。
     */
    val PID = "2088721063853564"

    /**
     * 用于支付宝账户登录授权业务的入参 target_id。
     */
    val TARGET_ID = ""

    /**
     * pkcs8 格式的商户私钥。
     *
     * 如下私钥，RSA2_PRIVATE 或者 RSA_PRIVATE 只需要填入一个，如果两个都设置了，本 Demo 将优先
     * 使用 RSA2_PRIVATE。RSA2_PRIVATE 可以保证商户交易在更加安全的环境下进行，建议商户使用
     * RSA2_PRIVATE。
     *
     * 建议使用支付宝提供的公私钥生成工具生成和获取 RSA2_PRIVATE。
     * 工具地址：https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=106097&docType=1
     */
    val RSA2_PRIVATE = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDGw1n//BWJK4u/NMHoW6xXvWwnz8aMPl4Ymc6oCcbVQJOziKZq1bsO/Ih3s/KW80xg5Jf297qxj0j1Ls9FFepMUnx0HUjxjK26VYmo9sGJ6TA+J++rd9Q6BKjpAD7S9nmfBttJdqq2LMKTCszHhnRPBs7f9RdO5MokmvlDT4oOOzIOHD7UouctUUfIpc91YHvmeXSHG8AyCZIoSRVr2DGY//+o1/Odw4G4gxkPulUKB/77fJpVwD5l3j40o/5wZfd5uKmtapXykXSPjHmoCmO52YzO68NIgokizBu3Qh1GCUT0uLAhxQ2L5DIH12L+/s6HUkhC5BRZwjJYjeoZC7izAgMBAAECggEBAI+VaXuZsDkCIxbCVt2y88ICTZJI72Y6W6Er4vTS8zb0Sn6kVYvR0CqYVUEb1kAji+Zm3DyFYvGHz62G3iZLGZF++PasfRg5hvqXdjV/4/nrYXVVRja4/q/W0+pVygx+DwfJXTopplKp7PlqENqGD5lTErkIhYjxj/F3nl94owN5ic1fYJcsvL357fwXCs13PY0Zqg+2d2B23WRbsQrCg/ccXftlCNZgsLXVTGy5S0UDqHz97jl8EpGqQ5NL595nujC77j4kYDzZv1OCOI/0rfODNhCtolVq6msvgb5DmISK406Jad+bdkI3nh7SwGX1BddX3Z/J5N8cJoX/HlklNLkCgYEA/GK+PUoPVVZxyUnmwIFjc20wuRGagpiIPeU9itcHrW8mzfgiQsQBcT4WkDX91mjEg1pbMesUunyIpoVsGJR1DB3YSsUpO2qpmTEg1eRLiJPcdkHEJxf+JUlzaAiROqvZtxdFdG7uth6xQFFf5FvXpWNoTcuF+HBtyzSjBQubaT0CgYEAyZwGjZ78xoTujyewGi5vqdD6sq5LnC4N9BBiGZelG4nrP6zKEH+6ceerJRRXt8zWHdtrX7FAHqOBORzB/WPmcpEtDs7OEoaCu7DzKII1Ch2VsOvAoe6NNHP8driguUoXBvn7Fcximnf0cx0TyDHtH+9cj2s91ZxKhpEnPogmaK8CgYBllTDQ5mApjvOZev8/eFSY/tffhXBVJCOiFgShP089xUEvIbJYgR+7fqwCO1kB1YVTASk3fFEJhlpR+924PviledW2soiX+6RrnlSDArJMNIdFqc7TlVqbk2a59sjNfqHQibNQ292Eu/HH23jnJvgy/0HaHhK8HjRy16rNuxBAWQKBgEETTcI0yV7C1cX7h4pL5tsni2RVgi5dZz+aci/UlQS4leitu2Nr9yCBKOsFD/NR+OMWSihPLGU3XaSztaI2ttHQLn0TH803AcfXrAUtUjV7qy+6SSl7uLRvo9QmcCqe0aP82KEGoeU+RvdJMXNzOhkOyA+7C/CBTET3YXV7uPodAoGAPFZjIK/6Iq4yM2ktJXlk5ky53BVzUYIqBd/2g62syXnNi3ob6HbWMurdy+N9/NnO/RK18/4LtFvsHaggD8eLwHcB1zU8s4r9G7xvdaI3MBx+Oxdgo08Bewf5Fhv5QhIofs8WP0kqDx/l75FFJ7XMwi/rkDgT18mOlputZh8MNqU="
    val RSA_PRIVATE = ""

    private val SDK_PAY_FLAG = 1
    private val SDK_AUTH_FLAG = 2

    @SuppressLint("HandlerLeak")
    private val mHandler: Handler = object : Handler() {
        @Suppress("unused")
        override fun handleMessage(msg: Message) {
            when (msg.what) {
                SDK_PAY_FLAG -> {
                    val payResult = PayResult(msg.obj as Map<String?, String?>)

                    /**
                     * 对于支付结果，请商户依赖服务端的异步通知结果。同步通知结果，仅作为支付结束的通知。
                     */
                    val resultInfo = payResult.result // 同步返回需要验证的信息
                    val resultStatus = payResult.resultStatus
                    // 判断resultStatus 为9000则代表支付成功
                    if (TextUtils.equals(resultStatus, "4000")) {
                        // 该笔订单是否真实支付成功，需要依赖服务端的异步通知。
                        EventBus.getDefault().post("payOk")
                    } else {
                        // 该笔订单真实的支付结果，需要依赖服务端的异步通知。
//                        ToastUtils.showLong("支付失败"+ payResult)
                        EventBus.getDefault().post("payFailed")
                    }
                }

                else -> {}
            }
        }
    }

    /**
     * 支付宝支付业务示例
     */
    fun payV2(money:String,context: Activity) {
        if (TextUtils.isEmpty(APPID) || TextUtils.isEmpty(RSA2_PRIVATE) && TextUtils.isEmpty(
                RSA_PRIVATE
            )
        ) {
            ToastUtils.showLong("Error: Missing \\\"APPID\\\" or \\\"RSA_PRIVATE\\\" in PayActivity.")
            return
        }

        /*
		 * 这里只是为了方便直接向商户展示支付宝的整个支付流程；所以Demo中加签过程直接放在客户端完成；
		 * 真实App里，privateKey等数据严禁放在客户端，加签过程务必要放在服务端完成；
		 * 防止商户私密数据泄露，造成不必要的资金损失，及面临各种安全风险；
		 *
		 * orderInfo 的获取必须来自服务端；
		 */
        val rsa2 = RSA2_PRIVATE.length > 0
        val params: Map<String, String> = OrderInfoUtil2_0.buildOrderParamMap(APPID, rsa2,money)
        val orderParam: String = OrderInfoUtil2_0.buildOrderParam(params)
        val privateKey = if (rsa2) RSA2_PRIVATE else RSA_PRIVATE
        val sign: String = OrderInfoUtil2_0.getSign(params, privateKey, rsa2)
        val orderInfo = "$orderParam&$sign"
        val payRunnable = Runnable {
            val alipay = PayTask(context)
            val result = alipay.payV2(orderInfo, true)
            Log.i("msp", result.toString())
            val msg = Message()
            msg.what = SDK_PAY_FLAG
            msg.obj = result
            mHandler.sendMessage(msg)
        }

        // 必须异步调用
        val payThread = Thread(payRunnable)
        payThread.start()
    }
}